package tp1traits.carrera

import tp1.Carrera
import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.Map
import tp1.Curso
import tp1.Nota
import tp1.Materia

trait Estadisticas {
     
    def listaDeNotas():ArrayBuffer[Nota]
  
	def promedios(): (Int,Int,Int,Int) ={
	  var cantidadNotasCA= 0
	  var sumaConAplazos= 0
	  var cantidadNotasSA= 0
	  var sumaSinAplazos= 0
	  this.listaDeNotas foreach{f_nota => if(f_nota.termino && f_nota.nota >= 4) {sumaSinAplazos += f_nota.nota
	    sumaConAplazos += f_nota.nota
	    cantidadNotasSA += 1
	    cantidadNotasCA += 1}
	    else if (f_nota.termino && f_nota.nota < 4){
	    	sumaConAplazos += f_nota.nota  
	    	cantidadNotasCA += 1
	    	}
	  	}
	  (sumaConAplazos,sumaSinAplazos,cantidadNotasCA,cantidadNotasSA)
	}
	
	 def promedioSinAplazos():Int ={
	   var tempPromedio = this.promedios()
	   tempPromedio._2/tempPromedio._4
   }
	 
	 def promedioConAplazos:Int ={
     var tempPromedio = this.promedios()
	 (tempPromedio._1+tempPromedio._2)/(tempPromedio._3)
     
   }
	 
	 def cursosRealizados: (Int,Int) ={
	   
	   var cantidadPersonasAprobadas = 0
	   var cantidadPersonasAbandonadas = 0
	   this.listaDeNotas foreach{f_nota =>
	     if(f_nota.termino && f_nota.nota >= 4) {cantidadPersonasAprobadas += 1}
	     if(!f_nota.termino){ cantidadPersonasAprobadas += 1}
	   }
	   (cantidadPersonasAprobadas,cantidadPersonasAbandonadas)
	 }
	 
	 def cantCursosAprobados:Int ={
     this.cursosRealizados._1
   }
	 
	 def cantCursosAbandonados:Int ={
	 this.cursosRealizados._2
   }
     
     def porcentajeDeCursosAprobados: Int ={
	 (this.cantCursosAprobados)*100/(this.cantCursosAprobados + this.cantCursosAbandonados)
   }
     
    def TablaDeNotas():Map[Int,Int]={
     var map: Map[Int,Int] = Map()
	 this.InicializarMap(map)
	 this.listaDeNotas foreach{f_nota =>   map += f_nota.nota -> (map.get(f_nota.nota).get + 1)  }
	 map 
   }
    
   /**Aux de Tabla Notas: arma un map con las 10 notas en cantidad 0 (Nota -> Cantidad)*/
   def InicializarMap(mapa: Map[Int,Int]){
     var tick = 0
     while(tick < 11){
     mapa += (tick -> 0);
     tick += 1
     }
   }
   
   def notaMasAltaNVeces(n: Int):Int={
     var cantNotas:Map[Int,Int]=TablaDeNotas
     var result = 0
     cantNotas.keys.foreach{ i =>
       if(cantNotas(i)>= n && result <= i){
          result = i
       }
     }
     result
   }
   
}